package com.koron.tool.mapper;

import com.koron.tool.bean.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * @Author: laiguangming
 * @Date: 2022/9/30 16:37
 */
public interface ToolInventoryMapper {

    /**
     * 获取库房盘点列表
     * @param toolInventoryQuery
     * @return
     */
    List<WarehouseInventoryBean> getInventoryStatus(ToolInventoryQuery toolInventoryQuery);

    /**
     * 获取库房盘点准备状态
     * @param warehouseId
     * @return
     */
    Integer getInventoryPreparation(String warehouseId);

    /**
     * 切换盘点准备状态
     * @param bean
     * @return
     */
    Integer switchInventoryPreparation(WarehouseInventoryBean bean);

    /**
     * 根据盘点单id删除盘点单临时清单
     * @param inventoryId
     * @return
     */
    Integer deleteInventoryCheckListTmp(String inventoryId);

    /**
     * 根据盘点单id删除盘点单盘点情况清单
     * @param inventoryId
     * @return
     */
    Integer deleteInventoryCheckList(String inventoryId);

    /**
     * 根据库房id获取盘点中的盘点单数量
     * @param warehouseId
     * @return
     */
    Integer getUnfinishedInventoryCount(String warehouseId);

    /**
     * 删除未盘点完的盘点单
     * @param warehouseId
     * @return
     */
    Integer deleteInventory(String warehouseId);

    /**
     * 根据盘点单id删除盘点单
     * @param inventoryId
     * @return
     */
    Integer deleteInventoryById(String inventoryId);

    /**
     * 创建盘点单
     * @param bean
     * @return
     */
    Integer createInventory(ToolInventoryBean bean);

    /**
     * 根据库房id获取历史盘点记录
     * @param warehouseId
     * @return
     */
    List<ToolInventoryBean> getHistoricalRecords(String warehouseId);

    /**
     * 修改库房盘点周期
     * @param bean
     * @return
     */
    Integer updateInventoryCycle(WarehouseInventoryBean bean);

    /**
     * 从所有盘点记录中过滤满足过滤条件的盘点单
     * @return
     */
    List<ToolInventoryBean> getInventoryList(ToolInventoryQuery toolInventoryQuery);

    /**
     * 根据 RFIDs 查询工器具的基本信息
     * @param RFIDs
     * @return
     */
    List<ToolInventoryCheckListTmpBean> getInventoryCheckListTmp(List<String> RFIDs);

    /**
     * 获取盘点单临时清单和盘点单对比情况清单中的code合集
     * @param inventoryId
     * @return
     */
    Set<String> getCodesInCheckList(String inventoryId);

    /**
     * 获取最近的盘点单单号
     * @return
     */
    String getLatestCodeInCheckList();

    /**
     * 查询盘点人员和盘点时间
     * @return
     */
    ToolStaffNameBean getToolStaffName();

    /**
     * 批量向盘点单临时清单中插入数据
     * @param list
     * @return
     */
    Integer insertInventoryCheckListTmp(List<ToolInventoryCheckListTmpBean> list);

    /**
     * 修改盘点单的盘点数量
     * @param inventoryId
     * @param inventoryCount
     * @return
     */
    Integer updateTotalInventory(@Param("inventoryId") String inventoryId, @Param("inventoryCount") Integer inventoryCount);

    /**
     * 查询盘点单中的临时清单
     * @param query
     * @return
     */
    List<ToolInventoryCheckListTmpBean> getInventoryDetailTmp(ToolInventoryCheckListQuery query);

    /**
     * 查询盘点单中已保存的清单
     * @param query
     * @return
     */
    List<ToolInventoryCheckListBean> getInventoryDetail(ToolInventoryCheckListQuery query);

    /**
     * 根据id批量删除盘点单中的临时清单
     * @param ids
     * @return
     */
    Integer deleteInventoryCheckListTmpByIds(List<String> ids);

    /**
     * 批量向盘点单清单中插入数据
     * @param list
     * @return
     */
    Integer batchSaveInventoryDetail(List<ToolInventoryCheckListBean> list);

    /**
     * 确认盘点时同步修改盘点单清单中的盘点人和盘点时间
     * @param bean
     * @return
     */
    int updateInventoryCheckList(ToolInventoryCheckListBean bean);

    /**
     * 获取盘点单清单中不存在，但数据库中记录为在库的工器具信息
     * @param query
     * @return
     */
    List<ToolInventoryCheckListBean> getOtherInventoryDetail(ToolInventoryCheckListQuery query);

    /**
     * 根据库房id查找当前库房处于盘点中状态的盘点单id
     * @param warehouseId
     * @return
     */
    String getUnfinishedInventoryId(String warehouseId);

    /**
     * 获取盘点单中已盘点工器具的code集合
     * @param inventoryId
     * @return
     */
    Set<String> getCodesAlreadyInventory(String inventoryId);

    /**
     * 向盘点报告单清单中批量插入数据
     * @param beanList
     * @return
     */
    Integer batchInsertInventoryReport(@Param("beanList") List<ToolInventoryReportBean> beanList);

    /**
     * 修改盘点单
     * @param bean
     * @return
     */
    Integer updateInventory(ToolInventoryBean bean);

    /**
     * 确认盘点后更新盘点单盘点状态
     * @param inventoryId
     * @return
     */
    Integer updateInventoryStatus(String inventoryId);

    /**
     * 确认盘点后更新工器具在库状态
     * @param Codes
     * @return
     */
    Integer updateToolInventoryStatus(@Param("Codes") Set<String> Codes);

    /**
     * 根据id获取盘点单
     * @param inventoryId
     * @return
     */
    ToolInventoryBean getInventoryById(String inventoryId);

    /**
     * 根据盘点单id获取盘点报告单清单
     * @param inventoryId
     * @return
     */
    List<ToolInventoryReportBean> getInventoryReport(String inventoryId);

}
